package flex.persistence.criteria {
	public interface From extends Path{
		
		/**
		 * get correlationParent():From
		 * Returns the parent From object from which the correlated From object has been obtained through correlation (use of a Subquery correlate method).
		 */
		function get correlationParent():From;
	
		/**
		 * get joins():Array;
		 * Return the joins that have been made from this bound type.
		 */
		function get joins():Array;
	
		/**
		 * boolean isCorrelated()
		 * Whether the From object has been obtained as a result of correlation (use of a Subquery correlate method).
		 */
		function isCorrelated():Boolean;
	
	
		function join(attribute:String,joinType:String,criteriaQuery:CriteriaQuery):Join;
		
		
		/**
		 * <Y> CollectionJoin<X,Y> join(CollectionAttribute<? super X,Y> collection)
		 * Create an inner join to the specified Collection-valued attribute.
		 */
		//function join
		/** <Y> CollectionJoin<X,Y> join(CollectionAttribute<? super X,Y> collection, JoinType jt)
		 * Create a join to the specified Collection-valued attribute using the given join type.
		 */
		/**
		 * <Y> ListJoin<X,Y> join(ListAttribute<? super X,Y> list)
		 * Create an inner join to the specified List-valued attribute.
		 */
		/**
		 * <Y> ListJoin<X,Y> join(ListAttribute<? super X,Y> list, JoinType jt)
		 * Create a join to the specified List-valued attribute using the given join type.
		 */
		/**
		 * <K,V> MapJoin<X,K,V> join(MapAttribute<? super X,K,V> map)
		 * Create an inner join to the specified Map-valued attribute.
		 */
		/**
		 * <K,V> MapJoin<X,K,V> join(MapAttribute<? super X,K,V> map, JoinType jt)
		 * Create a join to the specified Map-valued attribute using the given join type.
		 */
		/**
		 * <Y> SetJoin<X,Y> join(SetAttribute<? super X,Y> set)
		 * Create an inner join to the specified Set-valued attribute.
		 */
		/**
		 * <Y> SetJoin<X,Y> join(SetAttribute<? super X,Y> set, JoinType jt)
		 * Create a join to the specified Set-valued attribute using the given join type.
		 */
		/**
		 * <Y> Join<X,Y> join(SingularAttribute<? super X,Y> attribute)
		 * Create an inner join to the specified single-valued attribute.
		 */
		/**
		 * <Y> Join<X,Y> join(SingularAttribute<? super X,Y> attribute, JoinType jt)
		 * Create a join to the specified single-valued attribute using the given join type.
		 */
		/**
		 * <X,Y> Join<X,Y> join(java.lang.String attributeName)
		 * Create an inner join to the specified attribute.
		 */
		/**
		 * <X,Y> Join<X,Y> join(java.lang.String attributeName, JoinType jt)
		 * Create a join to the specified attribute using the given join type.
		 */
		/**
		 * <X,Y> CollectionJoin<X,Y> joinCollection(java.lang.String attributeName)
		 * Create an inner join to the specified Collection-valued attribute.
		 */
		/**
		 * <X,Y> CollectionJoin<X,Y> joinCollection(java.lang.String attributeName, JoinType jt)
		 * Create a join to the specified Collection-valued attribute using the given join type.
		 */
		/**
		 * <X,Y> ListJoin<X,Y> joinList(java.lang.String attributeName)
		 * Create an inner join to the specified List-valued attribute.
		 */
		/** 
		 * <X,Y> ListJoin<X,Y> joinList(java.lang.String attributeName, JoinType jt)
		 * Create a join to the specified List-valued attribute using the given join type.
		 */
		/**
		 * <X,K,V> MapJoin<X,K,V> joinMap(java.lang.String attributeName)
		 * Create an inner join to the specified Map-valued attribute.
		 */
		/**
		 * <X,K,V> MapJoin<X,K,V> joinMap(java.lang.String attributeName, JoinType jt)
		 * Create a join to the specified Map-valued attribute using the given join type.
		 */
		/**
		 * <X,Y> SetJoin<X,Y> joinSet(java.lang.String attributeName)
		 * Create an inner join to the specified Set-valued attribute.
		 */
		/**
		 * <X,Y> SetJoin<X,Y> joinSet(java.lang.String attributeName, JoinType jt)
		 * Create a join to the specified Set-valued attribute using the given join type.
		 */
	}
}